logback機能,設定まとめ #Java

您所在的位置:网站首页 logback logger appender logback機能,設定まとめ #Java

logback機能,設定まとめ #Java

2024-05-21 16:41| 来源: 网络整理| 查看: 265

概要

logbackの特徴や機能のまとめ記事です。 前半はサンプルアプリケーションを使ったコードや設定方法の説明になります。 後半は参考にさせて頂いたサイトの要点をまとめたリファレンス的な内容になります。

環境

下記の環境でサンプルアプリケーションの動作を確認しました。

Java 1.8.0_45 logback 1.1.3 slf4j 1.7.7 サンプルアプリケーション

mavenで雛形を作成しました。

> mvn archetype:generate -DgroupId=com.example.lbsample -DartifactId=lbsample -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

編集後のpom.xml

pom.xml 4.0.0 com.example.lbsample lbsample jar 1.0-SNAPSHOT lbsample http://maven.apache.org 1.8 1.1.3 UTF-8 ch.qos.logback logback-classic ${logback.version} junit junit 3.8.1 test org.apache.maven.plugins maven-compiler-plugin true ${java.version} ${java.version} ${project.build.sourceEncoding}

作成したlogback.xml

xml.logback.xml com.example.sample.animal.Cat ACCEPT System.out A: %-5r %d{yyyy-MM-dd HH:mm:ss} [%t] %highlight(%-5le) %cyan(%-40.40lo{36}) - %green(%msg) %n true System.out B: %-5r %d{yyyy-MM-dd HH:mm:ss} [%t] %highlight(%-5le) %yellow(%-40.40lo{36}) - %green(%msg) %n true System.err E: %-5r %d{yyyy-MM-dd HH:mm:ss} [%t] %highlight(%-5le) %red(%-40.40lo{36}) - %red(%msg) %n true ERROR ${LOG_DIR}/lbsample_a.log %-5r %d{yyyyMMdd HH:mm:ss.SSS} [%t] %-5le %lo{36} [%file:%line] - %msg %n ${file_b.log_dir:-D:/logs}${file_b.log_file} ${file_b.pattern} ${LOG_DIR}/roll_a_lbsample.log ${LOG_DIR}/rolling_lbsample_%d{yyyy-MM-dd_HH-mm}.log 30 %-5r %d{yyyyMMdd HH:mm:ss.SSS} [%t] %-5le %lo{35} - %msg %n ${LOG_DIR}/roll_b_lbsample.log ${LOG_DIR}/%d{yyyy-MM-dd,aux}/rolling2_lbsample_%d{yyyy-MM-dd_HH-mm}.log %-5r %d{yyyyMMdd HH:mm:ss.SSS} [%t] %-5le %lo{35} - %msg %n ${LOG_DIR}/roll_c_${${DEP}.${PRI}}.log roll_c_${LOG_DIR}/${${DEP}.${PRI}}_%i.log 15 19 5KB %-5r %d{yyyyMMdd HH:mm:ss.SSS} [%t] %-5le %lo{36} - %msg %n ${LOG_DIR}/roll_d_lbsample.log ${LOG_DIR}/roll_d_%d{yyyy-MM-dd_HH}.%i.log 5KB %-5r %d{yyyyMMdd HH:mm:ss.SSS} [%t] %-5le %lo{36} - %msg %n

作成したプロパティファイル

variables1.prpperties # FILE_B file_b.log_dir = D:/logs file_b.log_file = /lbsample_b.log file_b.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5le %lo{36} [%file:%line] - %msg%n DEP = CUSTOMER PRI = REGULAR CUSTOMER.REGULAR = cust_r CUSTOMER.IRREGULAR = cust_i CUSTOMER.EMERGENCY = cust_e SALES.REGULAR = sale_r SALES.IRREGULAR = sale_i SALES.EMERGENCY = sale_e PERSONNEL.REGULAR = pers_r PERSONNEL.IRREGULAR = pers_i PERSONNEL.EMERGENCY = pers_e

アプリケーションのディレクトリツリー

lbsample ├─src │ ├─main │ │ ├─java │ │ │ └─com │ │ │ └─example │ │ │ ├─lbsample │ │ │ │ └─App.java │ │ │ └─sample │ │ │ ├─Main.java │ │ │ ├─animal │ │ │ │ ├─cat │ │ │ │ │ └─Mike.java │ │ │ │ └─dog │ │ │ │ └─Shiba.java │ │ │ └─fruits │ │ │ ├─Budou.java │ │ │ └─budou │ │ │ └─Kyohou.java │ │ └─resources │ └─test サンプルコードとログの出力結果

サンプルコードのimport文は省略しています。

ロガー:com.example.sample

このロガーは他のロガー(root以外)の祖先ロガーになります。

Main.java package com.example.sample; public class Main { private static final Logger logger = LoggerFactory.getLogger(Main.class); public void doExec() { logger.debug("Main debug"); logger.info("Main info current:{}", new Date()); logger.warn("Main warn"); logger.error("Main error"); Budou.doExec(); Cat.doExec(); Dog.doExec(); } } logger name level STDOUT_A STDOUT_B STRERR com.example.sample DEBUG ○ INFO ○ WARN ○ ERROR ○

ロガー:com.example.sample.fruits

このロガーのアペンダーはSTDERRですが、祖先のロガーのアペンダーも引き継いでいるのでSTDOUT_Aへも出力します。

Budou.java package com.example.sample.fruits; public class Budou { private static final Logger logger = LoggerFactory.getLogger(Budou.class); public static void doExec() { logger.debug("Budou debug"); logger.info("Budou info current:{}", new Date()); logger.warn("Budou warn"); logger.error("Budou error"); Kyohou.doExec(); } } Kyohou.java package com.example.sample.fruits.budou; public class Kyohou { private static final Logger logger = LoggerFactory.getLogger(Kyohou.class); public static void doExec() { logger.debug("Budou.Kyohou debug"); logger.info("Budou.Kyohou info current:{}", new Date()); logger.warn("Budou.Kyohou warn"); logger.error("Budou.Kyohou error"); } } logger name level STDOUT_A STDOUT_B STRERR com.example.sample.fruits DEBUG INFO ○ WARN ○ ERROR ○ ○ com.example.sample.fruits.budou DEBUG INFO ○ WARN ○ ERROR ○ ○

ロガー:com.example.sample.animal

このロガーのアペンダーはSTDERRですが、祖先のロガーのアペンダーも引き継いでいるのでSTDOUT_Aへも出力します。

また、ログレベルがWARNに設定されていますが、下記のMarkerFilterにマッチするログはログレベルに関係なく出力されます。

com.example.sample.animal.Cat ACCEPT Cat.java package com.example.sample.animal; public class Cat { private static final Logger logger = LoggerFactory.getLogger(Cat.class); private static final Marker marker = MarkerFactory.getMarker(Cat.class.getCanonicalName()); public static void doExec() { logger.debug("Cat debug"); logger.info("Cat info current:{}", new Date()); logger.warn("Cat warn"); logger.error("Cat error"); logger.info(marker, "marker:{}", marker.getName()); Mike.doExec(); } } Dog.java package com.example.sample.animal; public class Dog { private static final Logger logger = LoggerFactory.getLogger(Dog.class); private static final Marker marker = MarkerFactory.getMarker(Dog.class.getCanonicalName()); public static void doExec() { logger.debug("Dog debug"); logger.info("Dog info current:{}", new Date()); logger.warn("Dog warn"); logger.error("Dog error"); logger.info(marker, "marker:{}", marker.getName()); Shiba.doExec(); } } Mike.java package com.example.sample.animal.cat; public class Mike { private static final Logger logger = LoggerFactory.getLogger(Mike.class); public static void doExec() { logger.debug("Cat.Mike debug"); logger.info("Cat.Mike info current:{}", new Date()); logger.warn("Cat.Mike warn"); logger.error("Cat.Mike error"); } } logger name level STDOUT_A STDOUT_B STRERR com.example.sample.animal DEBUG INFO △ WARN ○ ERROR ○ ○ com.example.sample.animal.cat DEBUG INFO WARN ○ ERROR ○ ○

ロガー:com.example.sample.animal.dog

このロガーのアペンダーSTDOUT_Bに出力されますが、additivity=falseを指定しているので祖先のロガー(STDOUT_A)には出力されません。 この指定を外すと祖先のロガーにも出力されるようになります。

Shiba.java package com.example.sample.animal.dog; public class Shiba { private static final Logger logger = LoggerFactory.getLogger(Shiba.class); public static void doExec() { logger.debug("Dog.Shiba debug"); logger.info("Dog.Shiba info current:{}", new Date()); logger.warn("Dog.Shiba warn"); logger.error("Dog.Shiba error"); } } logger name level STDOUT_A STDOUT_B STRERR com.example.sample.animal.dog DEBUG ○ INFO ○ WARN ○ ERROR ○ logback仕様まとめ

参考

下記のサイトの内容を参考にさせて頂きました。

LOGBack

LOGBack Logback マニュアル

Qiita

Logbackでファイルにログを吐く時の基本設定 SLF4J/LogbackでJSON形式のログ出力 appender name属性(必須)。アペンダーの名前を指定します。 class属性(必須)。アペンダークラスの完全名を指定します。 appenderには任意の数のlayout、encoder、filterを含めることができます。

appenderは次のようなものがあります

ConsoleAppender FileAppender RollingFileAppender ConsoleAppender

FQCN:ch.qos.logback.core.ConsoleAppender API: Class ConsoleAppender

ログをコンソール(System.outかSystem.err)に出力します。

property name type Description encoder Encoder default PatternLayoutEncoder. target String default System.out. System.out or System.err withJasi boolean default false. ConsoleAppender %d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{35} - %msg %n System.out false FileAppender

FQCN:ch.qos.logback.core.FileAppender API: Class FileAppender

ログをファイルに出力します。

property name type Description file String 出力先のファイル名. append boolean default true.trueは既存ファイルに追記します. encoder Encoder default PatternLayoutEncoder. prudent boolean default false. FileAppender app.log true %d{yyyy-MM-dd HH:mm:ss} %-5le [%t] %lo{36} - %msg %n false RollingFileAppender

FQCN:ch.qos.logback.core.rolling.RollingFileAppender API: Class RollingFileAppender

ログをファイルに出力します。指定した条件でファイルをアーカイブできます。 アーカイブの条件をrollingPolicyとtriggeringPolicyで指定します。

property name type Description file String 出力先のファイル名. append boolean default true. trueは既存ファイルに追記します. encoder Encoder default PatternLayoutEncoder. rollingPolicy RollingPolicy RollingPolicyインターフェースを実装したクラス. triggeringPolicy TriggeringPolicy TriggeringPolicyインターフェースを実装したクラス. prudent boolean default false. RollingPolicy

RollingPolicyは次のようなものがあります

TimeBasedRollingPolicy FixedWindowRollingPolicy TimeBasedRollingPolicy

FQCN:ch.qos.logback.core.rolling.TimeBasedRollingPolicy API: Class TimeBasedRollingPolicy

時間ベースでアーカイブを行います。アーカイブするタイミングは%dで指定します。 RollingPolicyとTriggeringPolicyを実装しています。 パターンに%dを含める必要があります。 property name type Description fileNamePattern String アーカイブファイル名. %dを含める必要があります. maxHistory int オプションです.保存するアーカイブファイルの数を指定します. この数値を超えるファイルは削除します. cleanHistoryOnStart boolean default false.

アーカイブするタイミングは%dで指定します。

pattern Description %d default pattern of yyyy-MM-dd. %d{yyyy-MM} 月初めにアーカイブします. %d{yyyy-ww} 週初めにアーカイブします. 週初めが日曜の場合は日曜日にアーカイブします. %d{yyyy-MM-dd_HH-mm} 1分ごとにアーカイブします. %d{yyyy-MM-dd_HH-mm, Asia/Tokyo} 同上です. 引数にタイムゾーンを指定できます. %d{yyyy-MM,aux}/%d 年月ディレクトリ(yyyy-MM)へ日ごとにアーカイブします. TimeBasedRollingPolicy app.log app.%d{yyyy-MM-dd}.log 30 %-5r %d [%t] %-5le %lo{36} - %msg %n

aux

1つ目の%dの引数にauxを指定するとそのパターンでアーカイブ先のディレクトを作成します。アーカイブするタイミングは2つ目の%dで指定します。

aux /var/logs/%d{yyyy-MM-dd,aux}/app_access_%d{yyyy-MM-dd_HH}.log

この例では、/var/logs以下にyyyy-MM-ddパターンでディレクトリを作成し、そのディレクトリへ1時間ごとにログファイルをアーカイブします。

image /var/logs | +--- /2015-06-20 | | | +--- app_access_2015-06-20_00.log | +--- app_access_2015-06-20_01.log | | | +--- app_access_2015-06-20_23.log | +--- /2015/06/21 | | | +--- app_access_2015-06-21_00.log | +--- app_access_2015-06-21_01.log SizeAndTimeBasedFNATP

FQCN:ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP API: Class SizeAndTimeBasedFNATP

時間とサイズでアーカイブを行います。 アーカイブする時間が来る前に指定サイズに達した場合は連番を付けてアーカイブを行います。

TimeBasedRollingPolicyのサブコンポーネントです。 パターンに%dと%iを含める必要があります。 %iは0から始まります。 property name type Description maxFileSize String ファイルサイズの上限を指定します. SizeAndTimeBasedFNATP app.log app-%d{yyyy-MM-dd}.%i.log 100MB %-5r %d [%t] %-5le %lo{36} - %msg %n FixedWindowRollingPolicy

FQCN:ch.qos.logback.core.rolling.FixedWindowRollingPolicy API: Class FixedWindowRollingPolicy

ファイルにインデックスを付けてアーカイブします。 インデックスの範囲でローテーションを行います。

RollingPolicyを実装しています。 TriggeringPolicyと併用します。 パターンに%iを含める必要があります。 %iの出力結果はminIdexからmaxIndexの範囲になります。 property name type Description minIndex int インデックスの最小値を指定します. maxIndex int インデックスの最大値を指定します. fileNamePattern String アーカイブファイル名. %iを含める必要があります. FixedWindowRollingPolicy app.log app.%i.log 1 3 5MB %-5r %d [%t] %-5le %lo{36} - %msg %n

この例ではアーカイブは下記の3ファイルをローテーションします。

app.1.log app.2.log app.3.log TriggeringPolicy

TriggeringPolicyは次のようなものがあります

TimeBasedRollingPolicy SizeBasedTriggeringPolicy TimeBasedRollingPolicy

時間ベースでアーカイブするタイミングを通知します。 (RollingFileAppenderで説明済みです。)

SizeBasedTriggeringPolicy

FQCN:ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy API: Class SizeBasedTriggeringPolicy

ファイルサイズベースでアーカイブするタイミングを通知します。 (FixedWindowRollingPolicyで説明済みです。)

property name type Description maxFileSize String ファイルサイズの上限を指定します. layout

通常はlayoutを直接使用することはありません。layoutの機能はencoderが代わりに行います。 patternに、変換パターン文字列と呼ぶメッセージフォーマットを指定します。変換パターン文字列は文字列リテラル、変換指定子、書式修飾子などで構成されます。

PatternLayout

FQCN:ch.qos.logback.classic.PatternLayout API: Class PatternLayout

これは古いバージョンでの記述方法です。

PatternLayout %-5r %d{yyyyMMdd HH:mm:ss.SSS} [%t] %-5le %lo{36} [%file:%line] - %msg %n

現在のバージョンではencoderを使用します。 encoderはデフォルトでPatternLayoutEncoderを使用します。

encoder %-5r %d{yyyyMMdd HH:mm:ss.SSS} [%t] %-5le %lo{36} [%file:%line] - %msg %n 変換指定子 変換指定子 短縮名 オプション 出力 速度 logger lo, c length ロガーの名前 level le, p ログレベル thread t スレッド date `d pattern ログの出力日時 message msg, m ログメッセージ n 改行コード contextName cn ロギングコンテキスト名 marker マーカーの名前 relative r 経過時間(ミリ秒) property key プロパティ replace(p) r, t 置換後の文字列 caller depth 位置情報 file F クラスのソースコードファイル名 低速 line L ソースコードファイル中の行番号 低速 class C length クラスの完全名 低速 method M メソッド名 低速 exception ex depth 例外 rootException rEx depth 例外 xException xEx depth 例外 nopexception nopex 例外を出力しない 書式修飾子

書式修飾子を使うと出力するデータの幅や文字揃えを指定できます。 書式修飾子は%記号と変換指定子の間に記述します。

この例では最小幅20、最大幅30の範囲でロガーの名前を出力します。 ロガーが20文字未満の場合は半角スペースを右側にパディングして20文字に調整します。(左揃え)

書式修飾子 %-20.30logger option description - 左揃えにします. 10 最小幅10文字で足りない分は先頭に半角スペースを付加します(右揃えに). -10 最小幅10文字で足りない分は末尾に半角スペースを付加します(左揃えに). .20 最大幅20文字で超えた分は先頭から削除します. .-20 最大幅20文字で超えた分は末尾から削除します.

date

%dateまたは%d変換指定子で日付を出力することができます。 引数にfomartとタイムゾーンを指定できます。

pattern output %date 2015-06-22 12:34:56,789 %date{yyyy-MM-dd} 2015-06-22 %date{yyyy-MM-dd HH:mm:ss.SSS} 2015-06-22 12:34:56.789 %date{yyyy-MM-dd HH:mm:ss.SSS, Asia/Tokyo} 同上, タイムゾーン指定あり.

Java8 - SimpleDateFormat

replace(p)

文字列の置換を行います。

この例は、メッセージの半角スペースを削除します。

replace %repalce(%msg){'\s',''}

この例は、ロガーとメッセージの.を/に置換します。

replace %replace(%logger %msg){'\.','/'}

exception

例外を出力するのに特別な設定は不要です。 ロガーの引数に例外オブジェクトを渡すだけで例外のスタックトレースが出力されます。

exception(抜粋) public class Ringo { private static final Logger logger = LoggerFactory.getLogger(Ringo.class); public static void doExec() { ...省略... Exception error = new Exception("例外メッセージ"); logger.error("りんごの例外テスト",error); } }

変換パターン文字列にも例外用の変換指定子を含めなくてもスタックトレースが出力されます。

pattern %-5r %date [%t] %-5le %-30.30lo{20} - %msg %n output 291 2015-06-22 10:40:43,763 [main] ERROR c.e.s.fruits.Ringo - りんごの例外テスト java.lang.Exception: 例外メッセージ at com.example.sample.fruits.Ringo.doExec(Ringo.java:26) ~[classes/:na] at com.example.sample.Main.Sample1(Main.java:21) [classes/:na] at com.example.lbsample.App.main(App.java:21) [classes/:na]

スタックトレースの出力を制御したい場合は%ex,%xEx,%rExなどの変換指定子を使用します。

coloring

色付け用の変換指定子を使ってメッセージを色づけすることができます。

%highlightの他に下表の色が指定できます。

regular bold %black %red %boldRed %green %boldGreen %yellow %boldYellow %blue %boldBlue %magenta %boldMagenta %cyan %boldCyan %white %boldWhite %gray coloring %d{yyyy-MM-dd HH:mm:ss} - [%t] - %highlight(%-5le) - %green(%-30lo{20}) - %msg %n encoder

encoderは次のようなものがあります

LayoutWrappingEncoder PatternLayoutEncoder LayoutWrappingEncoder

FQCN:ch.qos.logback.core.encoder.LayoutWrappingEncoder API: Class LayoutWrappingEncoder

自作のレイアウトを使用する場合などに使用します。

property name type Description pattern String 変換パターン文字列を指定します. layout Layout default PatternLayout. immediateFlush boolean default true. falseを指定するとファイルへの書き込みをバッファリングします. charset Charset 文字コードを指定します. LayoutWrappingEncoder PatternLayoutEncoder

FQCN:ch.qos.logback.core.encoder.PatternLayoutEncoder API: Class PatternLayoutEncoder

PatternLayoutEncoderはデフォルトのエンコーダーなのでclassに指定しなくてもかまいません。

property name type Description pattern String 変換パターン文字列を指定します. layout Layout default PatternLayout. immediateFlush boolean default true. falseを指定するとファイルへの書き込みをバッファリングします. charset Charset 文字コードを指定します. default %-5r %d{yyyyMMdd HH:mm:ss.SSS} [%t] %-5le %lo{36} [%file:%line] - %msg %n true

これは上記の例と同じ意味になります。

PatternLayoutEncoder %-5r %d{yyyyMMdd HH:mm:ss.SSS} [%t] %-5le %lo{36} [%file:%line] - %msg %n filter

filterは次のようなものがあります

LevelFilter ThresholdFilter EvaluatorFilter LevelFilter

FQCN:ch.qos.logback.classic.filter.LevelFilter API: Class LevelFilter

ログレベルでフィルタリングします。指定したレベルのログはonMatchで、それ以外のレベルのログはonMismatchで出力するか決定します。

Enum FilterReply

LevelFilter INFO ACCEPT DENY ThresholdFilter

FQCN:ch.qos.logback.classic.filter.ThresholdFilter API: Class ThresholdFilter

ログレベルでフィルタリングします。指定したレベル以上のログが出力されます。

ThresholdFilter ERROR EvaluatorFilter

FQCN:ch.qos.logback.core.filter.EvaluatorFilter API: Class EvaluatorFilter

フィルタリングはEventEvaluatorインターフェースを実装したクラスで評価した結果で行います。

TurboFilters

TurboFiltersは次のようなものがあります

MDCFilter MarkerFilter DuplicateMessageFilter MDCFilter

FQCN:ch.qos.logback.classic.turbo.MDCFilter API: Class MDC

Chapter 8: Mapped Diagnostic Context

MarkerFilter

FQCN:ch.qos.logback.classic.turbo.MarkerFilter API: Class MarkerFilter

マーカーが関連付けられたログをフィルタリングします。

この例ではcom.example.sample.animalパッケージのログはWARNレベル以上しか出力されない設定になっていますがMarkerFilterによってcom.example.sample.animal.Catのログはレベルにかかわらず出力されます。

marker(抜粋) package com.example.sample.animal; public class Cat { private static final Marker marker = MarkerFactory.getMarker(Cat.class.getCanonicalName()); public static void doExec() { ...省略... logger.debug(marker, "marker:{}", marker.getName()); } } MarkerFilter com.example.sample.animal.Cat ACCEPT DuplicateMessageFilter

FQCN:ch.qos.logback.classic.turbo.DuplicateMessageFilter API: Class DuplicateMessageFilter

重複するメッセージをフィルタリングします。

property name type Description allowedRepetitions int 繰り返しを許容する回数を指定します. デフォルトは5です. cacheSize int デフォルトは100です. DuplicateMessageFilter 10 200 logger

ロガーはlogger要素で設定します。

level属性はTRACE、DEBUG、INFO、WARN、ERROR、ALL、OFFのいずれかを指定できます。 additivityは任意です。デフォルトはtrueです。 appender-refでアペンダーを指定します。 logger root logger

ルートロガーはroot要素で設定します。 ルートロガーは全てのロガーの祖先ロガーです。

level属性(必須)。デフォルトはDEBUGです。 name属性は指定できません。(名前は"ROOT"で固定されているため) appender-refでアペンダーを指定します。 root Variable

変数を定義して使用することができます。 暗黙的にHOSTNAME変数とCONTEXT_NAME変数が定義されています。

property

変数の定義

設定ファイル内で変数を定義します。

property

外部のプロパティファイルを読み込んで変数を定義します。

property

定義した変数の使用

変数を使用するには定義した変数名を${と}で囲みます。

variable ${LOG_DIR}/app.log

パターン内で変数を使用するにはproperty変換指定子を使用します。

property %property{HOSTNAME} %d [%t] - %msg%n

変数のデフォルト値

デフォルト値は:-の後に続けて指定します。

default ${LOG_DIR:-/var/logs}/app.log

変数のネスト

変数の値を別の変数名の一部として使用することができます。

この例では、file要素はD:/logs/cust_r.logになります。

variables1.properties DEP = CUSTOMER PRI = REGULAR CUSTOMER.REGULAR = cust_r CUSTOMER.IRREGULAR = cust_i CUSTOMER.EMERGENCY = cust_e SALES.REGULAR = sale_r SALES.IRREGULAR = sale_i SALES.EMERGENCY = sale_e PERSONNEL.REGULAR = pers_r PERSONNEL.IRREGULAR = pers_i PERSONNEL.EMERGENCY = pers_e logback.xml ${LOG_DIR}/${${DEP}.${PRI}}.log timestamp

変数にタイムスタンプを使用

timestamp timestamp 付録 Eclipseのコンソールをカラーコードに対応させる

インストール

http://mihai-nita.net/java/ を参照しEclipseのPluginをインストールします。

設定

Window -> Preferences -> Ansi Consoleから下図のように設定を行います。

Enabledにチェックを入れます。 Show the escape sequencesのチェックを外します。

AnsiConsole.png

コンソール

カラーコード付きのメッセージを出力します。

eclipse_console.png



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3